package com.fdb.efp.nls.service.impl;

import com.fdb.basic.framework.core.constant.BaseConstant;
import com.fdb.basic.framework.core.util.StringUtil;
import com.fdb.basic.framework.core.util.TimeUtil;
import com.fdb.efp.nls.common.ConsoleConstant;
import com.fdb.efp.flow.common.vo.PageApproveVO;
import com.fdb.efp.nls.common.RiskColltConstant;
import com.fdb.efp.nls.service.facade.*;
import com.fdb.efp.nls.service.vo.ColltTaskDistrAppVO;
import com.fdb.efp.nls.service.vo.ColltTaskDistrVO;
import com.fdb.efp.nls.service.vo.ColltTaskInfoVO;
import com.fdb.efp.nls.service.vo.OutsTaskDistrMainVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.Objects;

/**
 * 需求编号【2019D0509】
 * 外催分案申请审批接口实现
 * @author qiuyf
 * @version 0.1 初始为0.1,后续变更则修改
 * @since 2019/9/21 11:06
 */
@Service("flowColltTaskDistrAppApprService")
public class ColltTaskDistrAppApprServiceImpl implements ColltTaskDistrAppApprService {

    private static Logger logger = LoggerFactory.getLogger(ColltTaskDistrAppApprServiceImpl.class);

    @Autowired
    @Qualifier("colltTaskDistrAppService")
    private ColltTaskDistrAppService colltTaskDistrAppService;

    @Autowired
    @Qualifier("colltTaskInfoService")
    private ColltTaskInfoService colltTaskInfoService;

    @Autowired
    @Qualifier("outsTaskDistrMainService")
    private OutsTaskDistrMainService outsTaskDistrMainService;

    @Autowired
    @Qualifier("colltTaskDistrService")
    private ColltTaskDistrService colltTaskDistrService;


    @Override
    public void pass(String bizSerno, PageApproveVO pageApproveVo) {
        logger.debug("======>外催分案申请审批通过后处理开始，流水号<======" +bizSerno);
        String curTime = TimeUtil.getCurrentDateTime();
        ColltTaskDistrAppVO colltTaskDistrAppVO = updColltTaskDistrAppVO(bizSerno, pageApproveVo, ConsoleConstant.APRV_STATUS_03, curTime);
        if(Objects.nonNull(colltTaskDistrAppVO) && StringUtil.isNotEmpty(colltTaskDistrAppVO.getColltBatchNo())){
            String colltWay = colltTaskDistrAppVO.getColltWay();
            String colltBatchNo = colltTaskDistrAppVO.getColltBatchNo();
            if(RiskColltConstant.STD_COLLT_WAY_03.equals(colltWay)){
                int num = updOutsTaskDistrMainVO(colltBatchNo);
                if(num > 0){
                    updColltTaskDistrVO(colltBatchNo, pageApproveVo, curTime);
                }
            }else if(RiskColltConstant.STD_COLLT_WAY_04.equals(colltWay) || RiskColltConstant.STD_COLLT_WAY_05.equals(colltWay)){
                updColltTaskDistrVO(colltBatchNo, pageApproveVo, curTime);
            }else{
                logger.error("======>分案申请审批通过，催收方式:"+ colltWay +"，存在异常！<======");
            }
        }else{
            logger.error("======>无法更新业务表数据中【分案是否通过】字段为'Y'。");
        }

        logger.debug("======>外催分案申请审批通过后处理结束，流水号<======" +bizSerno);
    }

    @Override
    public void refuse(String bizSerno, PageApproveVO pageApproveVo) {
        logger.debug("======>外催分案申请审批拒绝后处理开始，流水号<======" +bizSerno);
        String curTime = TimeUtil.getCurrentDateTime();
        ColltTaskDistrAppVO colltTaskDistrAppVO = updColltTaskDistrAppVO(bizSerno, pageApproveVo, ConsoleConstant.APRV_STATUS_04, curTime);
        if(Objects.nonNull(colltTaskDistrAppVO) && StringUtil.isNotEmpty(colltTaskDistrAppVO.getColltBatchNo())){
            String colltBatchNo = colltTaskDistrAppVO.getColltBatchNo();
            ColltTaskInfoVO colltTaskInfoVO = new ColltTaskInfoVO();
            colltTaskInfoVO.setColltBatchNo(colltBatchNo);
            colltTaskInfoVO.setColltWay(colltTaskDistrAppVO.getColltWay());
            //根据分配批次号、催收方式，恢复已分案的催收任务信息
            int num = colltTaskInfoService.updateRebackVO(colltTaskInfoVO);
            if(num <= 0){
                logger.error("======>外催分案申请审批拒绝，批量恢复已分案催收任务信息失败<======批次号:"+colltBatchNo);
            }
        }else{
            logger.error("======>外催分案申请审批拒绝，无法恢复已分案的催收任务信息数据为未分案！<======");
        }
        logger.debug("======>外催分案申请审批拒绝后处理结束，流水号<======" +bizSerno);
    }

    @Override
    public void repulse(String bizSerno, PageApproveVO pageApproveVo) {

    }


    private ColltTaskDistrAppVO updColltTaskDistrAppVO(String bizSerno, PageApproveVO pageApproveVo, String apprvSts, String curTime){
        ColltTaskDistrAppVO colltTaskDistrAppVO = new ColltTaskDistrAppVO();
        colltTaskDistrAppVO.setDistrCaseApply(bizSerno);
        colltTaskDistrAppVO = colltTaskDistrAppService.queryByPk(colltTaskDistrAppVO);
        if(Objects.isNull(colltTaskDistrAppVO)){
            logger.error("通过分案申请流水号:"+ bizSerno + "，获取到的外催分案申请信息为空！执行外催分案申请审批通过后处理失败。");
            return null;
        }
        colltTaskDistrAppVO.setApproveStatus(apprvSts);
        colltTaskDistrAppVO.setAprvUserCode(pageApproveVo.getAprvUserId());
        colltTaskDistrAppVO.setAprvUserName(pageApproveVo.getAprvUserName());
        colltTaskDistrAppVO.setAprvUserOrg(pageApproveVo.getAprvOrgCode());
        colltTaskDistrAppVO.setAprvComment(pageApproveVo.getAprvComment());
        colltTaskDistrAppVO.setAprvTime(curTime);
        colltTaskDistrAppVO.setLastUpdateUser(pageApproveVo.getAprvUserId());
        int updCtfaVONum = colltTaskDistrAppService.updateByPk(colltTaskDistrAppVO);
        if(updCtfaVONum < 0){
            logger.error("通过分案申请流水号:"+ bizSerno + "，更新审批通过信息失败。");
        }
        return colltTaskDistrAppVO;
    }

    private int updOutsTaskDistrMainVO(String colltBatchNo){
        OutsTaskDistrMainVO outsTaskDistrMainVO = new OutsTaskDistrMainVO();
        outsTaskDistrMainVO.setColltBatchNo(colltBatchNo);
        outsTaskDistrMainVO.setIsPassDistr(BaseConstant.YES_Y);
        int num = outsTaskDistrMainService.updateByColltBatchNo(outsTaskDistrMainVO);
        if(num <= 0){
            logger.debug("根据分配批次号:" + colltBatchNo + ",更新业务表[outs_task_distr_main]数据中【分案是否通过】字段为'Y'失败！");
        }
        return num;
    }

    private void updColltTaskDistrVO(String colltBatchNo, PageApproveVO pageApproveVO, String curTime){
        ColltTaskDistrVO colltTaskDistrVO = new ColltTaskDistrVO();
        colltTaskDistrVO.setColltBatchNo(colltBatchNo);
        colltTaskDistrVO.setIsPassDistr(BaseConstant.YES_Y);
        colltTaskDistrVO.setAprvTime(curTime);
        colltTaskDistrVO.setAprvUserCode(pageApproveVO.getAprvUserId());
        colltTaskDistrVO.setAprvUserName(pageApproveVO.getAprvUserName());
        colltTaskDistrVO.setAprvUserOrg(pageApproveVO.getAprvOrgCode());
        int num = colltTaskDistrService.updateByBatchNo(colltTaskDistrVO);
        if(num <= 0){
            logger.debug("根据分配批次号:" + colltBatchNo + ",更新业务表[collt_task_distr]数据中分案审批信息失败！");
        }
    }



}
